#include <stdio.h>
#include <string.h>
 
#define TRUE 1
#define FALSE 0
 
int isIpV4Addr(const char *ipAddr);
 
void main(void)
{
    char *ip_addr = "192.168.43.1";
    
    if(TRUE == isIpV4Addr(ip_addr))
    {
        printf("The ip[%s] is legal\n",ip_addr);
    }
    else
    {
        printf("The ip[%s] is not legal\n",ip_addr);
    }
 
}
 
int isIpV4Addr(const char *ipAddr)
{
    int ip_part_1 = 0;
    int ip_part_2 = 0;
    int ip_part_3 = 0;
    int ip_part_4 = 0;
    char end_char = 0;
    
    if((NULL == ipAddr) || (0 == strlen(ipAddr)))
    {
        return FALSE;
    }
    
    if(4 == sscanf(ipAddr,"%d.%d.%d.%d%c",&ip_part_1,&ip_part_2,&ip_part_3,&ip_part_4,&end_char))
    {
        if((ip_part_1 >= 0) && (ip_part_1 <= 255) &&
           (ip_part_2 >= 0) && (ip_part_2 <= 255) &&
           (ip_part_3 >= 0) && (ip_part_3 <= 255) &&
           (ip_part_4 >= 0) && (ip_part_4 <= 255) 
        )
        {
            return TRUE;
        }
    }
    
    return FALSE;
}

#include <stdio.h>
#include <arpa/inet.h>
#define CHECK_IPV4                          0
#define CHECK_IPV6                          1

//有效返回1,其他无效（0 无效，-1 错误）
int IsValidIP(const char *ip, int type)
{
    if (ip == NULL) return 0;

    int result = 0;

    if (type == CHECK_IPV4) {
        struct in_addr s;
        result = inet_pton(AF_INET, (char *)ip, (void *)&s);
    } else if (type == CHECK_IPV6) {
        struct in6_addr s;
        result = inet_pton(AF_INET6, (char *)ip, (void *)&s);
    }
    return result;
}
